package com.net.xpay.core.manager;

import com.net.xpay.core.dto.AccountAmountCountDto;
import com.net.xpay.core.model.*;
import com.net.common.manager.VersionedManager;
import com.net.xpay.core.domain.PayTransBatch;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;


public interface PayTransBatchManager extends VersionedManager<Long, PayTransBatch> {
    PayTransBatch findByImportBatchNo(Long userId, String importBatchNo);

    PayTransBatch findById(Long userId, Long id);

    List<PayTransBatch> search(PayTransBatchSearchModel searchModel);

    long searchCount(PayTransBatchSearchModel searchModel);

    List<PayTransBatch> list(PayTransBatchSearchModel searchModel);

    /**
     * 统计成功和部分成功打款的批次 不要随意改动 免费批次不统计进去 以后统计代码不写到这 单独维护
     */
    PayTransBatchStatResultModel statLevelOneSuccessPayTransBatch(Long partnerId, LocalDateTime minEndTime, LocalDateTime maxEndTime);

    PayTransBatchStatResultModel statLevelTwoSuccessPayTransBatch(Long partnerId, LocalDateTime minEndTime, LocalDateTime maxEndTime);

    /**
     * 统计单个用户每天的转账金额和次数
     *
     * @param userId
     * @param minEndTime
     * @param maxEndTime
     * @return
     */
    UserTransStatModel countAmountAndTimesOfSuccess(Long userId, LocalDateTime minEndTime, LocalDateTime maxEndTime);

    /**
     * 查询用户当天的支付宝转账额度
     *
     * @param currentDayStartTime ： 该天的开始时间
     * @param currentDayEndTime   ： 该天的结束时间
     * @param userId              ： 当前用户的id
     * @param alipayUserId        ： 当前用户的主支付宝id
     * @return
     */
    BigDecimal getTransferLimit(LocalDateTime currentDayStartTime, LocalDateTime currentDayEndTime, Long userId, Long alipayUserId);


    /**
     * 公司日账单数据统计
     */
    CompanyBillDailyStatModel statDailyCompanyBill(LocalDateTime minEndTime, LocalDateTime maxEndTime);

    UserPayTransStatCommonModel countNoFreeAmountAndTimesOfSuccess(Long userId, LocalDateTime minEndTime, LocalDateTime maxEndTime);
    /**
     * 统计当日的用户数据
     */
    PartnerUserPayTransDayStatModel sumPartnerUserPayTransDay(Long userId, LocalDateTime minEndTime, LocalDateTime maxEndTime);
    /**
     * 统计当日的合伙人数据
     */
    PartnerUserPayTransDayStatModel sumPartnerPayTransDay(Long partnerId, LocalDateTime minEndTime, LocalDateTime maxEndTime);
    /**
     * 统计当日的活跃合伙人数
     * @return
     */
    PayTransDailyStatModel statActivePartnerCount(LocalDateTime minEndTime, LocalDateTime maxEndTime);
    /**
     * 统计当日的后台经营数据
     * @return
     */
    CompanyPayTransDayStatModel sumCompanyPayTransDay(LocalDateTime minEndTime, LocalDateTime maxEndTime);
    /**
     * 统计付款超过500万的账户数
     * @return
     */
    long sumTotalVeryAlipayUserCount(LocalDateTime minEndTime, LocalDateTime maxEndTime);
    /**
     * 统计用户付款超过500万的账户数
     * @return
     */
    long sumUserTotalVeryAlipayUserCount(Long userId, LocalDateTime minEndTime, LocalDateTime maxEndTime);

    List<Long> listIds(PayTransBatchSearchModel searchModel);

    /**
     * 统计成功打款的金额
     * @param startTime
     * @param endTime
     * @param id
     * @param dayTime
     * @return
     */
    AccountAmountCountDto sumTransSuccessAmount(LocalDateTime startTime, LocalDateTime endTime, Long id, LocalDateTime dayTime);
}
